2
תגובות
בעיה בקוד ב OOP
פתח
ArielTador
,
שלום,
כפי שאתם יודעים, בנושא הקודם שלי הזכרתי שאני רוצה להתחיל ללמוד OOP, ושתביאו לי מדריכים.
אחרי שמצאתי מדריך מספק, בהבחורים הנפלאים intval ו LighTo273,
אני נתקעתי בבעיה.
סתכלו על הקוד הבא:
אם יש לי ב class a פונקציה שמכילה בתוכה את הקוד הבא:
ו התשובה של ה return היא 5,
אז איך יכול להיות אחרי class b, שיש לי את הקוד הבא:
ההדפסה שווה 5?
הרי אם בתוך הפונקצייה של class a, התשובה ב return שווה 5,
ופה עושים שב class b, אחרי ההורשה יהיה את הקוד הבא:
שזה בעצם b + התשובה של הפונקצייה ב class a,
והתשובה שווה 5?
הרי התרגיל פה הוא כזה:
5+2=7.
לא?
כפי שאתם יודעים, בנושא הקודם שלי הזכרתי שאני רוצה להתחיל ללמוד OOP, ושתביאו לי מדריכים.
אחרי שמצאתי מדריך מספק, בהבחורים הנפלאים intval ו LighTo273,
אני נתקעתי בבעיה.
סתכלו על הקוד הבא:
<?php
class a {
public $a = 2;
public function a_method() {
return $this->a + 3;
}
}
class b extends a{
public $b = 2;
public function b_method() {
return $this->b + a::a_method();
}
}
$instance = new b();
print $instance->a_method();
class a {
public $a = 2;
public function a_method() {
return $this->a + 3;
}
}
class b extends a{
public $b = 2;
public function b_method() {
return $this->b + a::a_method();
}
}
$instance = new b();
print $instance->a_method();
אם יש לי ב class a פונקציה שמכילה בתוכה את הקוד הבא:
return $this->a + 3;
ו התשובה של ה return היא 5,
אז איך יכול להיות אחרי class b, שיש לי את הקוד הבא:
$instance = new b();
print $instance->a_method();
print $instance->a_method();
ההדפסה שווה 5?
הרי אם בתוך הפונקצייה של class a, התשובה ב return שווה 5,
ופה עושים שב class b, אחרי ההורשה יהיה את הקוד הבא:
return $this->b + a::a_method();
שזה בעצם b + התשובה של הפונקצייה ב class a,
והתשובה שווה 5?
הרי התרגיל פה הוא כזה:
5+2=7.
לא?
2 תשובות
תפעיל הודעות על שגיאות.
return $this->b + a::a_method(); // 2 + 3
// why 3 ?
// because a::a_method() returns 3;
return $this->a + 3; // 0 + 3
// why 0?
because $this->a = 0
//why? because $this == null
// why? because a::a_method() is a static call, not instance call.
// go read again about what STATIC is
// + enable error_reporting. PHP has reported an error for you, but you don't see it
// why 3 ?
// because a::a_method() returns 3;
return $this->a + 3; // 0 + 3
// why 0?
because $this->a = 0
//why? because $this == null
// why? because a::a_method() is a static call, not instance call.
// go read again about what STATIC is
// + enable error_reporting. PHP has reported an error for you, but you don't see it
ענה
ArielTador
ב
21 לדצמבר 2012
#
אבל זה לא שגיאה, זה מה שכתוב ב webmaster, המדריך ל OOP שנתנת לי.